import axios from 'axios'
import store from '@/store'
import { getToken } from '@/utils/auth'
import { MessageBox } from 'element-ui'

// 创建axios实例
const instance = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  baseURL: process.env.NODE_ENV === 'development' ? `${process.env.VUE_APP_BASE_API}` : `${process.env.VUE_APP_API_PATH}${process.env.VUE_APP_BASE_API}`,
  headers: { // `headers` 是即将被发送的自定义请求头
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  withCredentials: true, // 跨域请求时发送 cookies
  timeout: 50000 // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
})

// 添加请求拦截器
instance.interceptors.request.use((config) => {
  // 在发送请求之前做些什么
  if (getToken()) {
    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  return config
}, (error) => {
  // 对请求错误做些什么
  // console.log(error) // for debug
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use((response) => {
  // 对响应数据做点什么
  const code = response.data.code
  if (code === 401) {
    MessageBox.confirm(
      '登录状态已过期，您可以继续留在该页面，或者重新登录',
      '系统提示',
      {
        confirmButtonText: '重新登录',
        cancelButtonText: '取消',
        type: 'warning'
      }
    ).then(() => {
      store.dispatch('LogOut').then(() => {
        location.reload() // 为了重新实例化vue-router对象 避免bug
      })
    })
  }
  return response
}, (error) => {
  // 对响应错误做点什么
  console.log('err' + error)// for debug
  console.log('err' + error.config)// for debug
  console.log('err' + error.request)// for debug
  console.log('err' + error.response)// for debug
  if (error.response) {
    switch (error.response.status) {
      case 401:
        MessageBox.confirm(
          '登录状态已过期，您可以继续留在该页面，或者重新登录',
          '系统提示',
          {
            confirmButtonText: '重新登录',
            cancelButtonText: '取消',
            type: 'warning'
          }
        ).then(() => {
          store.dispatch('LogOut').then(() => {
            location.reload() // 为了重新实例化vue-router对象 避免bug
          })
        })
        break
      case 403:
      case 404:
      case 500:
        break
    }
  } else if (error.request) {
    // returnLogin({})
  } else {
    console.log('Error', error.config)
  }
  return Promise.reject(error)
})

export default instance
